import { get, post, put, del, patch } from '@/utils/request'
import { User, UserQuery, PagedResponse, CreateUserRequest, AssignUserRolesRequest, Role } from '@/types/user'
import { ApiResponse } from '@/types/auth'

/**
 * 用户管理相关服务类
 * 统一管理所有用户相关的API请求
 */
class UserService {
  /**
   * 获取用户列表
   * @param params 查询参数
   * @returns Promise<ApiResponse<PagedResponse<User>>> 用户列表
   */
  async getUserList(params: UserQuery): Promise<ApiResponse<PagedResponse<User>>> {
    return await get('/users', params)
  }

  /**
   * 根据ID获取用户
   * @param id 用户ID
   * @returns Promise<ApiResponse<User>> 用户信息
   */
  async getUserById(id: number): Promise<ApiResponse<User>> {
    return await get(`/users/${id}`)
  }

  /**
   * 创建用户
   * @param data 用户数据
   * @returns Promise<ApiResponse<User>> 创建的用户信息
   */
  async createUser(data: CreateUserRequest): Promise<ApiResponse<User>> {
    return await post('/users', data)
  }

  /**
   * 更新用户
   * @param id 用户ID
   * @param data 更新的用户数据
   * @returns Promise<ApiResponse<User>> 更新后的用户信息
   */
  async updateUser(id: number, data: Partial<User>): Promise<ApiResponse<User>> {
    return await put(`/users/${id}`, data)
  }

  /**
   * 删除用户
   * @param id 用户ID
   * @returns Promise<ApiResponse> 删除结果
   */
  async deleteUser(id: number): Promise<ApiResponse> {
    return await del(`/users/${id}`)
  }

  /**
   * 批量删除用户
   * @param ids 用户ID数组
   * @returns Promise<ApiResponse> 删除结果
   */
  async batchDeleteUsers(ids: number[]): Promise<ApiResponse> {
    return await post('/users/batch-delete', { ids })
  }

  /**
   * 重置用户密码
   * @param id 用户ID
   * @param newPassword 新密码
   * @returns Promise<ApiResponse> 重置结果
   */
  async resetPassword(id: number, newPassword: string): Promise<ApiResponse> {
    return await post(`/users/${id}/reset-password`, { newPassword })
  }

  /**
   * 切换用户状态
   * @param id 用户ID
   * @param status 新状态
   * @returns Promise<ApiResponse<User>> 更新后的用户信息
   */
  async toggleUserStatus(id: number, status : number): Promise<ApiResponse<User>> {
    return await patch(`/users/${id}/status`, { status })
  }

  /**
   * 分配用户角色
   * @param data 角色分配数据
   * @returns Promise<ApiResponse> 分配结果
   */
  async assignUserRoles(data: AssignUserRolesRequest): Promise<ApiResponse> {
    return await post('/users/assign-roles', data)
  }

  /**
   * 获取用户的角色列表
   * @param userId 用户ID
   * @returns Promise<ApiResponse<Role[]>> 用户角色列表
   */
  async getUserRoles(userId: number): Promise<ApiResponse<Role[]>> {
    return await get(`/users/${userId}/roles`)
  }
}

export default new UserService()